package org.iori.pdf;

import java.io.FileInputStream;

import java.io.File;
import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.net.SocketException;

public final class FtpTest
{

	private static FTPClient ftpClient = null;
	private static String up_path = "C:/TDDOWNLOAD/";
	private static String ftp_path = "/home/matrix/";
	private static String up_file = "X16-42552VS2010UltimTrial1.iso";
	private static String ftp_file = "X16-42552VS2010UltimTrial1.iso";

    public static final void main(String[] args)
    {
        try {
			login("192.168.3.37", 21, "matrix", "matrix");
			
			FileInputStream fs = new FileInputStream(new File(up_path + up_file));
			uploadFileToFtp(ftp_path + ftp_file,fs);
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			System.out.println("========loginが失敗しましたので、ftp通信を確認してください。==========");
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

        logout();
    }

	public static void login(String ip, int port, String username,
			String password) throws SocketException, IOException {
		boolean result = false;
		ftpClient = new FTPClient();
		ftpClient.connect(ip, port);
		ftpClient.enterLocalPassiveMode();

		ftpClient.setControlEncoding("SJIS");
		ftpClient.setDataTimeout(3600);
		ftpClient.setBufferSize(1024 * 2);
		int reply = ftpClient.getReplyCode();
		if (FTPReply.isPositiveCompletion(reply)) {
			result = ftpClient.login(username, password);
			if (result == true) {
				System.out.println("========ftpログインOK==========");
			} else {
				System.out.println("========ftpログインNG==========");
			}
		} else {
			System.out.println("========ftp接続NG==========");
		}
    }

	public static void logout() {
		try {
			if (ftpClient != null) {
				ftpClient.logout();
				ftpClient.disconnect();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	* ファイルのアップロード
	* 
	* @param localFilePath--ローカルのパス
	* @param newFileName--アップロードしたファイル名
	* @throws IOException
	* @throws SocketException
	*/
	public static void uploadFileToFtp( String newFileName,FileInputStream fs)
			throws SocketException, IOException {
        try {
        	boolean result = false;
    		result = ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        	if (result == true) {
        		System.out.println("========setFileType BINARY_FILE_TYPE OK==========");
        	} else {
        		System.out.println("========setFileType BINARY_FILE_TYPE NG==========");
        	}
        	
        	result = ftpClient.storeFile(newFileName, fs);
        	if (result == true) {
        		System.out.println("========ファイルアップロードOK==========");
        	} else {
        		System.out.println("========ファイルアップロードNG==========");
        	}
        } catch (Exception e) {
        	System.out.println("========ファイルアップロードが失敗しましたので、ftp通信を確認してください。==========");
        	e.printStackTrace();
        } finally {
        	try {
                if (fs != null) {
                    fs.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

